package com.mpo.web.ws;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mpo.common.util.SeguridadesException;
import com.mpo.ejb.persistence.entities.Menu;
import com.mpo.ejb.persistence.util.dto.CredencialesDTO;
import com.mpo.ejb.persistence.util.dto.MenuDTO;
import com.mpo.ejb.persistence.vo.LoginVO;
import com.mpo.ejb.servicio.ServicioLogin;
import com.mpo.ejb.servicio.frontend.ServicioClienteRemote;

/***
 * Clase que ofrece web servicios relacionados con los clientes del sistema
 * 
 * @author jose auquilla
 * 
 */

@Path("/wsClientes")
public class WSClientes  implements ExceptionMapper<Exception> {
	private static final Logger slf4jLogger = LoggerFactory.getLogger(WSClientes.class);
	private LoginVO loginVO;
	private CredencialesDTO credencialesDTO;
	ServicioClienteRemote servicioCliente;
	ServicioLogin servicioLogin;
	public Response toResponse(Exception e) {
return null;
	}
	/**
	 * Metodo de web service que permite insertar datos de un pasajero
	 * @param nombres
	 * @param apellidos
	 * @param pasaporte
	 * @param email
	 * @param pais
	 * @throws NamingException
	 */
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosCliente/{nombres}/{apellidos}/{pasaporte}/{email}/{pais}")
	public void setPasajero(@PathParam("nombres") String nombres,
			@PathParam("apellidos") String apellidos,
			@PathParam("pasaporte") String pasaporte,
			@PathParam("email") String email,
			@PathParam("pais") String pais) throws NamingException {
		slf4jLogger.info("setPasajero web service");
		InitialContext context = new InitialContext();
		servicioCliente = (ServicioClienteRemote) context
				.lookup("ejb:mpoEAP/mpoEJB/ServicioClienteImpl!com.mpo.ejb.servicio.frontend.ServicioClienteRemote");
		 try {
			servicioCliente.setPasajero(nombres, apellidos, pasaporte, email, pais);
		} catch (SeguridadesException e) {
			e.printStackTrace();
		}

	}
 
	/**
	 * Metodo Web service que permite insertar datos de un nuevo servicio contratado por el cliente
	 * @param tipo_servicio
	 * @param servicio
	 * @param valorUnit
	 * @param cantidad
	 * @param detalle
	 * @throws NamingException
	 */
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosServiciosClientes/{cuenta}/{servicio}/{cantidad}/{detalle}")
	public boolean setServiciosCliente(@PathParam("cuenta") Integer cuenta,
			@PathParam("servicio") Integer servicio,
			@PathParam("cantidad") Integer cantidad,
			@PathParam("detalle") String detalle) throws NamingException {
		slf4jLogger.info("setServicio web service");
		InitialContext context = new InitialContext();
		servicioCliente = (ServicioClienteRemote) context
				.lookup("ejb:mpoEAP/mpoEJB/ServicioClienteImpl!com.mpo.ejb.servicio.frontend.ServicioClienteRemote");
		 try {
			servicioCliente.setServiciosCliente(cuenta, servicio, cantidad, detalle);
		} catch (SeguridadesException e) {
			e.printStackTrace();
		}
  return true;
	}
	/**
	 * Meytodo de ws que permite abrir nueva cuenta de usuario
	 * @param cliente
	 * @param descripcionCuenta
	 * @return
	 * @throws NamingException
	 */
	
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosCuentaCliente/{cliente}/{descripcionCuenta}")
	public boolean setAbrirCuentaCliente(@PathParam("cliente") Integer cliente,
			@PathParam("descripcionCuenta") String descripcionCuenta) throws NamingException {
		slf4jLogger.info("setServicio web service");
		InitialContext context = new InitialContext();
		servicioCliente = (ServicioClienteRemote) context
				.lookup("ejb:mpoEAP/mpoEJB/ServicioClienteImpl!com.mpo.ejb.servicio.frontend.ServicioClienteRemote");
		 try {
			servicioCliente.setAbrirCuentaCliente(cliente, descripcionCuenta);
		} catch (SeguridadesException e) {
			e.printStackTrace();
		}
  return true;
	}

	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/getLoginVO")
	public LoginVO getLoginVO() throws SeguridadesException {
		slf4jLogger.info("getLoginVO web service");
		
		 this.loginVO=new LoginVO();
  return this.loginVO;
	}
	
	
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/getCredencialesDTO")
	public CredencialesDTO getCredencialesDTO() throws SeguridadesException {
		slf4jLogger.info("getCredencialesDTO web service");
		
		 this.credencialesDTO=new CredencialesDTO();
  return this.credencialesDTO;
	}
	
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/autenticarUsuario/{usuario}/{password}")
	public LoginVO autenticarUsuario(@PathParam("usuario") String usuario, @PathParam("password") String password) throws NamingException, SeguridadesException  {
		slf4jLogger.info("setServicio web service");
		InitialContext context = new InitialContext();
		servicioLogin = (ServicioLogin) context
				.lookup("ejb:mpoEAP/mpoEJB/ServicioLoginImpl!com.mpo.ejb.servicio.ServicioLogin");
		LoginVO loginVOTemp=new LoginVO();
		 
			 this.loginVO=new LoginVO();
			 this.loginVO.getCredencialesDTO().setUsuario(usuario);
			 this.loginVO.getCredencialesDTO().setPassword(password);
			 this.loginVO=servicioLogin.autenticarUsuario(this.loginVO);
			 loginVOTemp.setCredencialesDTO(this.loginVO.getCredencialesDTO());
			 loginVOTemp.getUsuario().setIdUsuario(this.loginVO.getUsuario().getIdUsuario());
			 loginVOTemp.getUsuario().setEstado(this.loginVO.getUsuario().getEstado());
			 loginVOTemp.setIdPersona(this.loginVO.getUsuario().getPersona().getIdPersona());
			 loginVOTemp.setNombres(this.loginVO.getUsuario().getPersona().getNombres());
			 loginVOTemp.setIdPerfil(this.loginVO.getUsuario().getPerfil().getIdPerfil());
			 
			 
			 
		
		
  return loginVOTemp;
	}
	
	
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/getMenusIdPerfil/{perfil}")
	public List<MenuDTO> getMenusPorIdPerfil(@PathParam("perfil") Integer perfil) throws NamingException {
		slf4jLogger.info("getMenusPorIdPerfil web service");
		InitialContext context = new InitialContext();
		servicioLogin = (ServicioLogin) context
				.lookup("ejb:mpoEAP/mpoEJB/ServicioLoginImpl!com.mpo.ejb.servicio.ServicioLogin");
		List<MenuDTO> menus=new ArrayList<MenuDTO>();
		 try {
			menus=servicioLogin.obtenerMenusPorIdPerfil(perfil);
		} catch (SeguridadesException e) {
			e.printStackTrace();
		}
  return menus;
	}
}
